import io
import base64
from PIL import Image
import cv2

import numpy as np


def pil_image_2_byte(image):
    """
    图片转byte
    image: 必须是PIL格式
    image_bytes: 二进制
    """
    # 创建一个字节流管道
    img_bytes = io.BytesIO()
    # 将图片数据存入字节流管道， format可以按照具体文件的格式填写
    image.save(img_bytes, format="JPEG")
    # 从字节流管道中获取二进制
    image_bytes = img_bytes.getvalue()
    return image_bytes


def byte_2_pil_image(byte_data):
    """
    byte转为图片
    byte_data: 二进制
    """
    image = Image.open(io.BytesIO(byte_data))
    return image


def cv2_image_2_byte(image):
    return cv2.imencode(".jpg", image)[1].tobytes()


# 参照https://blog.csdn.net/dcrmg/article/details/79155233
def cv2_image_from_byte(buf):
    buf = np.asarray(bytearray(buf), dtype="uint8")
    return cv2.imdecode(buf, cv2.IMREAD_COLOR)


def cv2_image_from_string(str_encode):
    nparr = np.fromstring(str_encode, np.uint8)
    return cv2.imdecode(nparr, cv2.IMREAD_COLOR)
